package main

// 原子操作
import (
	"fmt"
	"sync"
	"sync/atomic"
)

var (
	x    int64 = 0
	wg         = sync.WaitGroup{}
	lock       = sync.Mutex{}
)

func Add() {
	// lock.Lock()
	// x++
	// lock.Unlock()
	// defer wg.Done()

	// 不使用lock ，使用aotic
	atomic.AddInt64(&x, 1)
	defer wg.Done()
}

var m2 = sync.Map{}

func main() {
	for i := 0; i < 1000; i++ {
		go Add()
		wg.Add(1)
	}
	wg.Wait()
	fmt.Printf("x: %v\n", x) // // x: 1000

	var n1 int64 = 10
	ok2 := atomic.CompareAndSwapInt64(&n1, 10, 1) // 第一个参数 == 第二个参数 ? 将第三个参数赋值给第一个参数 : return
	if !ok2 {
		fmt.Println("比较转换失败")
	}
	fmt.Printf("n1: %v\n", n1) // n1: 1
}
